Today it is possible for a businessperson to use an e-mail application and a calendar application (for keeping track of appointments) on a mobile phone or a palm (handheld) computer (or some other mobile terminal) and have an assistant use the same applications on a desktop computer to keep track of e-mail sent and received by the assistant on behalf of the businessperson, and to keep track of appointments for the businessperson. In such an arrangement, it is often the case that the data items (also called here data units) for the e-mail application and data items for the calendar are kept in a data store on the mobile phone and in another data store on the desktop. Thus, when changes are made to either of the data stores, each including data items for both the e-mail and the calendar application, the data stores need to be synchronized. In synchronizing respective data stores (i.e. synchronizing both the data items and data structure of the two data stores) used by two applications running on different equipment the contents of the two data stores are set to correspond to each other based on a protocol in which changes since a last synchronization are communicated, conflicts between changes made on both pieces of equipment are resolved (according to some policy), and changes are made to either the data items or their organization or both in one or both of the data stores.
A facility is being developed for synchronizing such data stores based on what is called SyncML (synchronization markup language), being developed under the so-called SyncML Initiative. (See the .org website for SyncML for information about SyncML, including standards and specifications for SyncML, and the SyncML Initiative, especially including the SyncML Representation Protocol and the SyncML Sync Protocol.) SyncML is an open industry standard for a common language for universal synchronization of remote data (i.e. data items stored in different equipment and so in different data stores) and personal information across multiple networks, platforms and devices. With SyncML, data items, but not yet data structure, can be synchronized on different devices connected via one or more interconnecting networks, including, for example, a Universal Mobile Telecommunications System (UMTS) Radio Access Network (UTRAN) and the Internet, where the communication may be wireless in whole or in part or may be wireline. Thus, the devices may communicate via, for example, fixed networks (including wireless networks), infrared, cable, or Bluetooth.
Besides being used to synchronize data stores, SyncML (i.e. the language) can be used for device management, and more particularly for transferring management actions between a client and a management server for the client. See the SyncML website to find the specification, SyncML Device Management Protocol. SyncML Device Management Protocol allows management commands to be executed on management objects and it uses a package format similar to the SyncML Synchronization Protocol and the SyncML Representation Protocol. A management object might reflect a set of configuration parameters for a device. Actions that can be taken against this object might include reading and setting parameter keys and values. Another management object might be the run-time environment for software applications on a device. Actions that can be taken against this type of object might include installing, upgrading, or uninstalling software elements. Actions are represented by SyncML Device Management Protocol Commands, which are described in SyncML Representation Protocol, Device Management Usage. The commands and message structure used correspond identically to that of the SyncML Synchronization Protocol. (Thus, the so-called document type definition for the Management Protocol is the document type definition from SyncML Synchronization Protocol.)
Until now, the progress of mobile data synchronization has mostly been determined by restrictions. Data store synchronization has been based on a set of different, proprietary protocols, each functioning only with a very limited number of devices, systems and data types. These non-interoperable technologies have complicated the tasks of users, manufacturers, service providers, and developers. Further, a proliferation of different, proprietary data store synchronization protocols has placed barriers to the extended use of mobile devices, has restricted data access and delivery and limited the mobility of the users.
As the popularity of mobile computing and communications devices grows, users want access to updated information and applications wherever they are, and using whatever device is available, prompting a need for an open standard such as the SyncML standard.
SyncML uses the syntax of the so-called Extensible Markup Language (XML) as set out in Extensible Markup Language (XML) 1.0, a product of the World Wide Web Consortium (W3C) XML Activity. For information about XML, see the .org website of the World Wide Web Consortium.
As used here, the terminology data item or data unit indicates a unit of data that is organized into what are here called folders that in turn make up what is here called a directory structure, also called here a data structure. Referring to FIG. 4, a directory structure is shown including various folders, each of which can include one or more data units.
The term directory structure or data structure and the term folder are to be understood broadly. First, a folder should be understood to be any container of data units. Thus, for example, what is called a folder in various operating systems (such as Windows, available from Microsoft Corporation) is to be understood by the term folder as used here, but so is a record in a table of a relational database, since a record in such a table includes fields, which are data units. Even such a field can be considered a folder, since a field contains characters, numbers, or other elements that can be considered data units, and thus each field is a folder.
The term directory structure or data structure indicates the arrangement of folders in the data store, such as for example a tree structure of folders in a directory maintained by an operating system, in which case the data units would be files. But the term directory structure or data structure should be understood to also encompass directory structures maintained internally by applications, i.e. not maintained by an operating system, but instead maintained by an application running under an operating system. An example is the directory structure maintained by most e-mail applications, which usually always include at least two folders: a received e-mail (in-box) folder and a transmitted e-mail (sent) folder. Moreover, the terminology directory structure or data structure should also be understood to encompass internal directory structures that are shared by different applications (so that the directory structure is not internal to only one application, but to several, usually well-interfaced applications, any of which can make changes to it). Further, the terminology directory structure or data structure should also be understood to encompass both system directory structures and internal directory structures. In the case of an internal directory maintained by an e-mail application, a data unit would be an e-mail, a kind of internal file. In a directory structure of either type, a folder can include, in general, data units that belong to different applications, and an application knows whether a data unit belongs to it or to another application based either on some attribute maintained in association with the data unit or based on the application keeping a private table of all data units that belong to it, wherever they may be located. Also, since as has already been explained, a folder can indicate for example a record in a table of a database or even a field within such a record, the terminology directory structure or data structure should also be understood to encompass even a database structure (when a folder is a record) or a record structure (when a folder is a field). It is important to understand that the term folder is thus used expansively, to indicate any container of data units, and the terminology directory structure or data structure has a correspondingly expansive meaning.
A user of an application can make changes to both the data units that belong to the application (such as adding a new data unit or replacing a data unit with an updated version because the user has used the application to change the contents of the data unit, and so on) as well as to how the data items are stored (such as adding a new folder and moving some data units from an already existing folder to the new folder), i.e. to both the data units as well as to the folders (i.e. the overall directory structure). According to the prior art for SyncML, however, if a user changes folders on a device, SyncML cannot be used to synchronize the data store on the device with a corresponding data store being maintained on another device; the prior art for SyncML allows only synchronizing with respect to changes in data units.
A SyncML message is a nested structure, and one or more SyncML messages can be associated with what is called a SyncML package. The SyncML Message is an individual XML document consisting of one or more elements each of one or more element types. The document consists of a header, specified by the SyncHdr element type, and a body, specified by the SyncBody element type. The SyncML header specifies routing and versioning information about the SyncML Message. The SyncML body is a container for one or more SyncML Commands. The SyncML Commands are specified by individual element types. The SyncML Commands act as containers for other element types that describe the specifics of the SyncML command, including any data or meta-information.
SyncML defines request commands and response commands. Request commands include, for example: add (a command that allows the originator to ask that one or more data units be added to data accessible to the recipient); alert (allowing the originator to notify the recipient of a condition; copy (allowing the originator to ask that one or more data units accessible to the recipient be copied); delete (allowing the originator to ask that one or more data units accessible to the recipient be deleted or archived); get (allowing the originator to ask for one or more data units from the recipient); and search (allowing the originator to ask that the supplied query be executed against one or more data units accessible to the recipient). The only response commands are currently: status (indicating the completion status of an operation or that an error occurred while processing a previous request); and results (used to return the data results of either a Get or Search SyncML Command).
SyncML uses identifiers to identify data units or folders. The identifiers are included in what are called the Source and Target element types, and can be a combination of Uniform Resource Identifiers (URIs), Uniform Resource Names (URNs), and textual names. (To indicate an International Mobile Equipment Identifier (IMEI), SyncML uses an IMEI URN type. The IMEI URN specifies a valid, 15 digit IMEI. In addition, SyncML uses the SyncML URN type to identify SyncML specific name spaces and unique names. Other URN types may also be used in the LocURI element type.)
As already mentioned, the SyncML representation protocol (i.e. a SyncML message) is a document mark-up consisting of XML element types. The element types are defined in terms of their purpose or usage, parent elements, any restrictions on content or use and content model. The element types include so-called common use elements, message container elements, data description elements, protocol management elements, and protocol command elements.
Common use element types are element types used by other SyncML element types, and include, for example, archive, for indicating that the data specified in a delete command should be archived by the recipient of the delete command, rather than simply deleted. Thus the delete command can use the archive common use element and so is referred to as the parent element of the archive common use element type, in this context. Another common use element type is the Cmd element type, which is used to specify the SyncML command referenced by a Status element type (and so the Status element type is the parent element in this context). Another is the CmdID element type, which is used to specify a SyncML message-unique command identifier, and can have various parent elements, including: Add, Alert, Atomic, Copy, Delete, Exec, Get, Map, Put, Replace, Results, Search, Sequence, Status, and Sync.
Of particular note in respect to the invention are the common element types LocName, LocURI, Source, and Target. LocName is used to specify the display name for the target or source address, and so can have as parent elements Target or Source. LocURI specifies the target or source specific address, and can also have as parent elements Target or Source. The common element type Source is used to specify source routing or mapping information; its parent elements include: Item, Map, MapItem, Search, Sync, and SyncHdr. Target is used to specify target routing or mapping information, and its Parent Elements include: Item, Map, MapItem, Search, Sync, and SyncHd.
Message container element types provide basic container support for SyncML messages. Three such element types are: SyncML, for specifying the container for a SyncML message, and having no parents since it is what is called a root or document element; SyncHdr, for specifying the container for the revisioning information or the routing information (or both) in the SyncML message, and having as a parent element a SyncML element; and SyncBody, for specifying the container for the body or contents of a SyncML message, and also having as a parent element a SyncML element.
Data description elements are used as container elements for data exchanged in a SyncML Message; data description elements include the following element types: Data, for specifying discrete SyncML data, and used by (parent elements) Alert, Cred, Item, Status, and Search element types; Item, for specifying a container for item data, and used by (parent elements) Add, Alert, Copy, Delete, Exec, Get, Put, Replace, Results, and Status; and Meta, for specifying meta-information about the parent element type, and used by (parent elements) Add, Atomic, Chal, Copy, Cred, Delete, Get, Item, Map, Put, Replace, Results, Search, Sequence, and Sync.
The protocol management elements include, at present, only the element type Status, for specifying the request status code for an indicated SyncML command, and used by (parent element) SyncBody.
Finally, there are the Protocol Command Elements. These include the command elements already mentioned, i.e. for example: Add, for specifying that data be added to a data collection, used by (parent elements) Atomic, Sequence, Sync, SyncBody; Delete; Replace; and so on.
All of the above element types are set out in the standard, SyncML Representation Protocol, available on the Internet at the .org website of the World Wide Web Consortium, as the pdf file:
syncml_represent_v11_20020215.pdf.
Communicating changes in a directory structure is not problematic if the same application takes care of handling the data and handling the communication according to a synchronization protocol. But in case of the more general problem, in which on each device several applications share a data store organized as a directory structure, storing their respective data units in one or more of the folders of the directory structure, how best to arrange for synchronizing not only data units but also folders, i.e. how to structure a synchronization protocol for doing so, is not clear. According to the open standard, SyncML Synchronization Protocol, a product of the SyncML Initiative, each of two remote devices having respective data stores to be synchronized (in any respect), includes a synchronization (sync) agent (one per device, and so serving possibly many different applications) and one or more application entities, and following synchronization protocol (i.e. communicating according to the synchronization protocol set out in the standard) is the responsibility not of the applications, but of the sync agents. (Only the sync agent understands SyncML, not the applications.) But only the applications know whether a data unit has been changed since the most recent, already-performed synchronization. There are some options for how to extend the SyncML synchronization protocol that require including in each of the applications a knowledge of SyncML, like what is encoded in the sync agent, and some options that require the sync agent to be able to interpret data units the way the different applications do.
What is needed is a way for SyncML (or any analogous synchronization language) to refer to aspects of data organization, such as folders in a directory structure, in a way that minimizes the demands on the sync agent and application, and so avoids having to replicate code or folder information.